From f3cc74d2f11ce9865726e02c6d9938e76234a92a Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Fri, 6 Mar 2009 18:58:41 +0000 Subject: [PATCH] tool: make management of PCI D-states by guest optional D3hot state in some PCI devices causes the failure of domain creation/destruction. The default is "pci_power_mgmt=3D0" which disables the guest OS from managing D-states because it would be better to avoid the trouble than advantage of low power consumption. Signed-off-by: Kouya Shimura --- tools/examples/xmexample.hvm | 9 +++++++++ tools/python/xen/xend/XendConfig.py | 1 + tools/python/xen/xend/server/pciif.py | 2 ++ tools/python/xen/xm/create.py | 14 ++++++++++---- tools/python/xen/xm/xenapi_create.py | 1 + 5 files changed, 23 insertions(+), 4 deletions(-) diff --git a/tools/examples/xmexample.hvm b/tools/examples/xmexample.hvm index 0977ef4221..e9d0738dd3 100644 --- a/tools/examples/xmexample.hvm +++ b/tools/examples/xmexample.hvm @@ -308,6 +308,8 @@ serial='pty' # available options are: # - msitranslate=0|1 # per-device overriden of pci_msitranslate, see below +# - power_mgmt=0|1 +# per-device overriden of pci_power_mgmt, see below # #pci=[ '07:00.0', '07:00.1' ] @@ -322,6 +324,13 @@ serial='pty' # #pci_msitranslate=1 +# PCI Power Management: +# +# If it's set, the guest OS will be able to program D0-D3hot states of the +# PCI device for the purpose of low power consumption. +# +#pci_power_mgmt=0 + #----------------------------------------------------------------------------- # Configure PVSCSI devices: # diff --git a/tools/python/xen/xend/XendConfig.py b/tools/python/xen/xend/XendConfig.py index f62cd856a1..bb0a0bc26d 100644 --- a/tools/python/xen/xend/XendConfig.py +++ b/tools/python/xen/xend/XendConfig.py @@ -169,6 +169,7 @@ XENAPI_PLATFORM_CFG_TYPES = { 'hap': int, 'xen_extended_power_mgmt': int, 'pci_msitranslate': int, + 'pci_power_mgmt': int, } # Xen API console 'other_config' keys. diff --git a/tools/python/xen/xend/server/pciif.py b/tools/python/xen/xend/server/pciif.py index f76e4a8c49..51189c7e78 100644 --- a/tools/python/xen/xend/server/pciif.py +++ b/tools/python/xen/xend/server/pciif.py @@ -97,6 +97,8 @@ class PciController(DevController): back['uuid'] = config.get('uuid','') if 'pci_msitranslate' in self.vm.info['platform']: back['msitranslate']=str(self.vm.info['platform']['pci_msitranslate']) + if 'pci_power_mgmt' in self.vm.info['platform']: + back['power_mgmt']=str(self.vm.info['platform']['pci_power_mgmt']) return (0, back, {}) diff --git a/tools/python/xen/xm/create.py b/tools/python/xen/xm/create.py index 3b4da70451..8491a5e693 100644 --- a/tools/python/xen/xm/create.py +++ b/tools/python/xen/xm/create.py @@ -322,14 +322,16 @@ gopts.var('disk', val='phy:DEV,VDEV,MODE[,DOM]', backend driver domain to use for the disk. The option may be repeated to add more than one disk.""") -gopts.var('pci', val='BUS:DEV.FUNC[,msitranslate=0|1]', +gopts.var('pci', val='BUS:DEV.FUNC[,msitranslate=0|1][,power_mgmt=0|1]', fn=append_value, default=[], use="""Add a PCI device to a domain, using given params (in hex). For example 'pci=c0:02.1'. If msitranslate is set, MSI-INTx translation is enabled if possible. Guest that doesn't support MSI will get IO-APIC type IRQs translated from physical MSI, HVM only. Default is 1. - The option may be repeated to add more than one pci device.""") + The option may be repeated to add more than one pci device. + If power_mgmt is set, the guest OS will be able to program the power + states D0-D3hot of the device, HVM only. Default=0.""") gopts.var('vscsi', val='PDEV,VDEV[,DOM]', fn=append_value, default=[], @@ -605,6 +607,10 @@ gopts.var('pci_msitranslate', val='TRANSLATE', use="""Global PCI MSI-INTx translation flag (0=disable; 1=enable.""") +gopts.var('pci_power_mgmt', val='POWERMGMT', + fn=set_int, default=0, + use="""Global PCI Power Management flag (0=disable;1=enable).""") + def err(msg): """Print an error to stderr and exit. """ @@ -691,7 +697,7 @@ def configure_pci(config_devs, vals): d = comma_sep_kv_to_dict(opts) def f(k): - if k not in ['msitranslate']: + if k not in ['msitranslate', 'power_mgmt']: err('Invalid pci option: ' + k) config_pci_opts.append([k, d[k]]) @@ -913,7 +919,7 @@ def configure_hvm(config_image, vals): 'acpi', 'apic', 'usb', 'usbdevice', 'keymap', 'pci', 'hpet', 'guest_os_type', 'hap', 'opengl', 'cpuid', 'cpuid_check', 'viridian', 'xen_extended_power_mgmt', 'pci_msitranslate', - 'vpt_align' ] + 'vpt_align', 'pci_power_mgmt' ] for a in args: if a in vals.__dict__ and vals.__dict__[a] is not None: diff --git a/tools/python/xen/xm/xenapi_create.py b/tools/python/xen/xm/xenapi_create.py index 5c6333ccb4..4018a667a7 100644 --- a/tools/python/xen/xm/xenapi_create.py +++ b/tools/python/xen/xm/xenapi_create.py @@ -1047,6 +1047,7 @@ class sxp2xml: 'guest_os_type', 'hap', 'pci_msitranslate', + 'pci_power_mgmt', ] platform_configs = [] -- 2.30.2